package sistemadearquivos;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

/**
 *
 * @author denilson
 */
public class Arquivo {
    private String nome;
    private int inicio;
    private int indice;
    private int blocos;
    private String dados;
    private int posicao;
    private String sIndice;
    public Arquivo(){
        nome = "";
        inicio = 0;
        indice=0;
        dados="";
        blocos = 0;
        posicao = 0;
        sIndice = "";
    }
    
        //nome.substring(1, 2);//o segundo não aparece
     public ArrayList<Arquivo> consultarArquivo() throws Exception{
        ArrayList<Arquivo> lista = new ArrayList();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Class.forName("com.mysql.jdbc.Driver");
        Connection con;
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sistemadearquivos", "root", "root");
        try{
            pstmt = con.prepareStatement("select * from arquivo");
            rs = pstmt.executeQuery();
            while (rs.next()) {
                Arquivo a;
                a = new Arquivo();
                a.setNome(rs.getString("nome"));
                a.setInicio(rs.getInt("inicio"));
                a.setBlocos(rs.getInt("numero_blocos"));
                
                lista.add(a);
            }
        } catch (Exception ex) {
            throw new Exception ("Falha na Classe Arquivo: "+ex.getMessage());
        } finally {
            rs.close();
            pstmt.close();
            con.close();
        }
        
        
        return lista;
     }
        public ArrayList<Arquivo> consultarDisco() throws Exception{
        ArrayList<Arquivo> lista = new ArrayList();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Class.forName("com.mysql.jdbc.Driver");
        Connection con;
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sistemadearquivos", "root", "root");
        try{
            pstmt = con.prepareStatement("select * from disco");
            rs = pstmt.executeQuery();
            while (rs.next()) {
                Arquivo a;
                a = new Arquivo();
                a.setPosicao(rs.getInt("posicao"));
                a.setIndice(rs.getInt("indice"));
                a.setsIndice(rs.getString("vindice"));
                a.setNome(rs.getString("nome_arquivo"));
                                
                lista.add(a);
            }
        } catch (Exception ex) {
            throw new Exception ("Falha na Classe Arquivo: "+ex.getMessage());
        } finally {
            rs.close();
            pstmt.close();
            con.close();
        }
        
        
        return lista;
     }
     public void gravarDisco() throws Exception{
        PreparedStatement pstmt = null;
        Class.forName("com.mysql.jdbc.Driver");
        Connection con;
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sistemadearquivos", "root", "root");
        try{
            pstmt = con.prepareStatement("insert into disco (posicao,nome_arquivo,indice,inicio,numero_blocos,dados) value (?,?,?,?,?,?)");
            pstmt.setInt(1, getPosicao());
            pstmt.setString(2, getNome());
            pstmt.setInt(3, getIndice());
            pstmt.setInt(4,getInicio());
            pstmt.setInt(5, getBlocos());
            pstmt.setString(6, getDados());
            
            pstmt.execute();
        
        
        } catch (Exception ex) {
            throw new Exception ("Falha na Classe Arquivo: "+ex.getMessage());
        } finally {
            pstmt.close();
            con.close();
        }
     }
     public Boolean verificaPosicao(int posicao) throws Exception{
         Arquivo arquivo = new Arquivo();
         ArrayList<Integer> lista = arquivo.consultaPosicao();
          for(int i=0; i<lista.size();i++){
             if(posicao == lista.get(i)){
                return true;
             }
         }
        return false;
     }
     public ArrayList<Integer> consultaPosicao() throws Exception{
        ArrayList<Integer> lista = new ArrayList();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Class.forName("com.mysql.jdbc.Driver");
        Connection con;
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sistemadearquivos", "root", "root");
        try{
            pstmt = con.prepareStatement("select posicao from disco");
            rs = pstmt.executeQuery();
            while (rs.next()) {
                int n;
                n = rs.getInt("posicao");
                
                lista.add(n);
            }
        } catch (Exception ex) {
            throw new Exception ("Falha na Classe Arquivo: "+ex.getMessage());
        } finally {
            rs.close();
            pstmt.close();
            con.close();
        }
         
         return lista;
     }
     public ArrayList<Arquivo> consultaArquivoDisco(String nome) throws Exception{
        ArrayList<Arquivo> lista = new ArrayList();
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        Class.forName("com.mysql.jdbc.Driver");
        Connection con;
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sistemadearquivos", "root", "root");
        try{
            pstmt = con.prepareStatement("select * from disco where nome_arquivo = ? and vindice is null");
            pstmt.setString(1, nome);
            rs = pstmt.executeQuery();
            Arquivo aux;
            while (rs.next()) {
                aux = new Arquivo();
                aux.setPosicao(rs.getInt("posicao"));
                aux.setNome(rs.getString("nome_arquivo"));
                aux.setBlocos(rs.getInt("numero_blocos"));
                
                lista.add(aux);
            }
        } catch (Exception ex) {
            throw new Exception ("Falha na Classe Arquivo: "+ex.getMessage());
        } finally {
            rs.close();
            pstmt.close();
            con.close();
        }
         
         return lista;
     }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the inicio
     */
    public int getInicio() {
        return inicio;
    }

    /**
     * @param inicio the inicio to set
     */
    public void setInicio(int inicio) {
        this.inicio = inicio;
    }

    /**
     * @return the blocos
     */
    public int getBlocos() {
        return blocos;
    }

    /**
     * @param blocos the blocos to set
     */
    public void setBlocos(int blocos) {
        this.blocos = blocos;
    }

    /**
     * @return the posicao
     */
    public int getPosicao() {
        return posicao;
    }

    /**
     * @param posicao the posicao to set
     */
    public void setPosicao(int posicao) {
        this.posicao = posicao;
    }

    /**
     * @return the indice
     */
    public int getIndice() {
        return indice;
    }

    /**
     * @param indice the indice to set
     */
    public void setIndice(int indice) {
        this.indice = indice;
    }

    /**
     * @return the sIndice
     */
    public String getsIndice() {
        return sIndice;
    }

    /**
     * @param sIndice the sIndice to set
     */
    public void setsIndice(String sIndice) {
        this.sIndice = sIndice;
    }

    /**
     * @return the dados
     */
    public String getDados() {
        return dados;
    }

    /**
     * @param dados the dados to set
     */
    public void setDados(String dados) {
        this.dados = dados;
    }
}
